Release Train and Release Management Adapter
This adapter can be used for release train management for product development releases. The adapter allows for the creation and maintenance of release trains, which are groups of releases associated with specific timelines and features. It enables the mapping of different releases to specific release trains and facilitates the management of features associated with those releases. The Release Manager can use this component to track the timeline of release trains and plan releases effectively.
Usage
The release train and release management adapter is used for the following operations in the Calibo Accelerate platform:
-
Release Train Management
The adapter can be used to manage release trains within the product development process.
-
Mapping Releases
It can be utilized to establish connections between various releases and their corresponding release trains while managing associated activities.
-
Feature Tracking
The component helps in tracking the management of features for each release, ensuring they adhere to proper timelines.
List of Requirements
The release train and release management adapter must meet the following requirements:
-
One-to-One Mapping
It must have a one-to-one mapping between release trains.
-
One-to-Many Mapping
The component should allow a one-to-many mapping between releases and release trains.
-
Data Integrity
It should maintain all mapping information and serve as the source of truth for validation purposes.
-
Admin Privileges
Administrative privileges should be provided to perform necessary activities within the component.
-
Secure Connection with Backend Systems and Credential Handling
The component should establish secure connections with backend systems, and any sensitive credentials required for authentication should be securely stored in a secrets management tool as a security best practice.
APIs and Interfaces
public interface ElabReleaseService {
boolean testConnection();
User getUserContext();
ReleaseIssuesCount getReleaseIssueCount(String releaseName);
List<ProjectVersionResponseBean> getProjectReleases(String projectName);
ProjectVersionResponseBean addProjectRelease(ProjectVersionCreationBean request);
ProjectVersionResponseBean checkAndGetProjectRelease(String projectName, String releaseName);
Object associateFixVersions(UpdateFixVersionBean request);
Object deAssociateFixVersions(UpdateFixVersionBean request);
}
The interfaces to be implemented and the associated classes are as follows:
-
TestConnection()
-
Usage: This interface method is used to test the connection of the component.
-
Input: To establish the connection, the interface retrieves credentials (username and password) securely from the secrets management tool.
-
Output: It provides the status of the connection, indicating whether the connection was successful or not.
-
-
GetUserContext()
-
Usage: This interface method is used to obtain the context of the user at the component level.
-
Input: The authentication token for the user is passed to the interface, which is then used to fetch user details from the component.
-
Output: It returns the user context, which includes various user-related attributes such as self, name, key, accountId, avatarUrls, displayName, active status, timeZone, and accountType. This context provides comprehensive information about the user.
Copypublic class User {
@JsonProperty("self")
private String self;
@JsonProperty("name")
private String name;
@JsonProperty("key")
private String key;
@JsonProperty("accountId")
private String accountId;
@JsonProperty("avatarUrls")
private AvatarUrls avatarUrls;
@JsonProperty("displayName")
private String displayName;
@JsonProperty("active")
private Boolean active;
@JsonProperty("timeZone")
private String timeZone;
@JsonProperty("accountType")
private String accountType;
}
-
-
GetReleaseIssueCount(String releaseName)
-
Usage: This interface method is used to get the issue count for a specific release.
-
Input: Release name.
-
Output: A response object of the ReleaseIssuesCount class, which contains various issue count metrics.
Copypublic class ReleaseIssuesCount {
private int totalIssues;
private int toDoIssues;
private int inProgressIssues;
private int blockedIssues;
private int completedIssues;
}
-
-
GetProjectReleases(String projectName)
-
Usage: This interface method is used to retrieve all releases associated with a specific project.
-
Input: Project Name.
-
Output: A list of response objects of the ProjectVersionResponseBean class, each representing a project release.
Copypublic class ProjectVersionResponseBean {
private String id;
private String description;
private String name;
private String archived;
private String released;
private String startDate;
private String releaseDate;
private String projectId;
}
-
-
AddProjectRelease(ProjectVersionCreationBean request)
-
Usage: This interface method is used to create new releases for a project.
-
Input: A request object of the ProjectVersionCreationBean class, containing release details.
Copypublic class ProjectVersionCreationBean {
private Integer projectId;
private String project;
private String releaseDate;
private String startDate;
private String name;
private String description;
} -
Output: A response object of the ProjectVersionResponseBean class, representing the newly created release.
Copypublic class ProjectVersionResponseBean {
private String id;
private String description;
private String name;
private String archived;
private String released;
private String startDate;
private String releaseDate;
private String projectId;
}
-
-
CheckAndGetProjectRelease(String projectName, String releaseName)
-
Usage: This interface method is used to check and retrieve information about a release for a specified project.
-
Input: Key for project name and release name.
-
Output: A response object of the ProjectVersionResponseBean class, providing details about the project release.
Copypublic class ProjectVersionResponseBean {
private String id;
private String description;
private String name;
private String archived;
private String released;
private String startDate;
private String releaseDate;
private String projectId;
}
-
-
AssociateFixVersions(UpdateFixVersionBean request)
-
Usage: This interface method is used to associate tickets (issues or tasks) with specific releases for a project.
-
Input: A request object of the UpdateFixVersionBean class, specifying project, labels, and release versions.
Copypublic class UpdateFixVersionBean {
String projectName;
List<String> labels;
List<ReleaseVersionWrapperBean> releaseVersion;
}
public class ReleaseVersionWrapperBean {
private String id;
private String name;
private boolean fromCache;
} -
Output: It returns Java object as a response.
-
-
DeAssociateFixVersions(UpdateFixVersionBean request):
-
Usage: This interface method is used to remove tickets from releases for a project.
-
Input: A request object of the UpdateFixVersionBean class, specifying project, labels, and release versions.
Copypublic class UpdateFixVersionBean {
String projectName;
List<String> labels;
List<ReleaseVersionWrapperBean> releaseVersion;
}
public class ReleaseVersionWrapperBean {
private String id;
private String name;
private boolean fromCache;
} -
Output: It returns Java object as a response.
-
The following APIs consume the interfaces that are listed earlier in this topic:
-
Release Train Creation
-
Release Train Updation
-
Release Train Release Creation
-
Release Train Release Assignment
-
Release Train Release Feature Association
-
Release Train Release Feature De-association
-
Release Management
-
Release Train Release Deletion
-
Release Train Deletion
Data Models and Formats
The release train and release management adapter utilizes JSON or XML for communication between different parts of the system. JSON and XML are structured data formats commonly used for data interchange.
Data Model for Storing Release Train-Related Information
Here is the structure of the data model that is used to store information related to release trains.
public class FeatureDetailsEntity extends Auditable {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id")
private String id;
@Column(name = "release_train_id")
private String releaseTrainId;
@Column(name = "release_train_name")
private String releaseTrainName;
@Column(name = "project_id")
private String projectId;
@Column(name = "tool_name")
private String toolName;
@Column(name = "description")
private String description;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusEnum status = StatusEnum.ACTIVE;
@Column(name = "mapping_done")
private Boolean mappingDone;
}
Data Model for Storing Release Mapping Information
Here is the structure of the data model that is used to store information related to release mapping.
public class ReleaseTrainReleaseMappingEntity extends Auditable {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id")
private String id;
@Column(name = "release_id")
private String releaseTrainId;
@Column(name = "release_name")
private String releaseTrainName;
@Column(name = "release_train_id")
private String releaseTrainId;
@Column(name = "project_id")
private String projectId;
@Column(name = "tool_name")
private String toolName;
@Column(name = "description")
private String description;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusEnum status = StatusEnum.ACTIVE;
@Column(name = "mapping_done")
private Boolean mappingDone;
}
Data Model for Storing Feature Mapping Information
Here is the structure of the data model that is used to store information related to feature mapping.
public class ReleaseFeatureMappingEntity extends Auditable {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id")
private String id;
@Column(name = "feature_id")
private String featureId;
@Column(name = "release_id")
private String releaseId;
@Column(name = "project_id")
private String projectId;
@Column(name = "tool_name")
private String toolName;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusEnum status = StatusEnum.ACTIVE;
@Column(name = "mapping_done")
private Boolean mappingDone;
}
What's next? Data Pipeline Studio Adapters |